import 'package:flutter/material.dart';
import '../widgets/node_context_menu.dart';

/// 显示文件/文件夹节点的**右键（长按）上下文菜单**。
///
/// 用法：在 `GestureDetector.onTapDown` / `onSecondaryTapDown` 中调用，
/// 传入 [TapDownDetails] 以定位菜单弹出位置。
///
/// 参数说明：
/// - [context]：当前的 Build 上下文；
/// - [details]：点击/按下事件详情，用于获取全局坐标 [TapDownDetails.globalPosition]；
/// - [isFolder]：是否为文件夹（影响菜单项构建，例如“新建文件/文件夹”等）；
/// - [enableGenerate]：是否在菜单中启用 **Generate** 选项；
///
/// 返回值：
/// - 返回被点击菜单项的 `value`（`String`），若用户取消或点空白处则返回 `null`。
///
/// 位置计算：
/// - 通过 [Overlay.of] 获取 overlay 的尺寸；
/// - 使用 [RelativeRect.fromRect] 将点击位置相对 overlay 进行定位；
/// - 菜单项由 [NodeContextMenu.build] 依据 [isFolder] 动态生成。
Future<String?> showNodeContextMenu(
    BuildContext context,
    TapDownDetails details, {
      required bool isFolder,
      bool enableGenerate = false,
    }) async {
  final overlay = Overlay.of(context);
  final overlayBox = overlay.context.findRenderObject() as RenderBox;

  return showMenu<String>(
    context: context,
    position: RelativeRect.fromRect(
      details.globalPosition & const Size(40, 40),
      Offset.zero & overlayBox.size,
    ),
    items: NodeContextMenu.build(
      isFolder,
      enableGenerate: enableGenerate,
    ),
  );
}
